/*********************************************************************
 * PhSprite. Clase de utilidad. Sprite con propiedades Físicas.
 * Programación Multimedia y Juegos
 * Autor: David Vallejo Fernández    david.vallejo@tegnix.com
 * Autor: Carlos González Morcillo   carlos.gonzalez@tegnix.com
 *
 * You can redistribute and/or modify this file under the terms of the
 * GNU General Public License ad published by the Free Software
 * Foundation, either version 3 of the License, or (at your option)
 * and later version. See <http://www.gnu.org/licenses/>.
 *
 * This file is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * General Public License for more details.  
 *********************************************************************/

package physic;

import aze.display.TileSprite;
import aze.display.TileLayer;

import phx.World;
import phx.Body;
import phx.Shape;

class PhSprite extends TileSprite {
  var _root:TileLayer;   // Capa de dibujado de este Sprite
  var _world:World;      // Mundo de simulación física
  var _body:Body;        // Cuerpo de simulación asociado al Sprite

  // Constructor ==================================================
  public function new(id:String, l:TileLayer, w:World, px:Float, 
		      py:Float):Void {
    super(id); _root = l; _world = w; x = px; y = py; 
    _root.addChild(this);   // Añadir Sprite a la capa de dibujado
    _body = new Body(x,y);  // Crear cuerpo de simulación física
    scale = 1 + Std.random(75) / 50;   // Tamaño aleatorio
    _body.addShape(Shape.makeBox(width, height));
    _body.a = (Math.PI / 180.0) * Std.random(360);  // Rotación!
    _body.updatePhysics();  // Actualización del cuerpo
    _world.addBody(_body);  // Añadimos el cuerpo al mundo
  }

  // Update =======================================================
  public function update(w:Int, h:Int):Void {
    _body.updatePhysics();   // Actualizamos el cuerpo en físicas
    x =_body.x; y =_body.y;  // Copiamos coordenadas al Sprite
    rotation = _body.a;      // Copiamos rotación en Sprite
  }
}
